---
id: unit3
title: 第三章 进程与线程
---

带着以下问题   
什么是进程和线程以及它们的区别？  
进程和线程有哪些状态以及状态的转换？  
进程控制块的作用和内容？  
进程控制的各种操作?  
进程和线程的调度算法设计思想和应用?  
## **多道程序设计**
多道程序就是允许多个程序，同时进入内存并运行。  
主要目的是为了提高各种资源的利用效率，缩短程序执行的周转时间。

<img src="./img/duo.jpg"  />

**程序的顺序执行的特点：**  
（1）顺序性。  
（2）封闭性（程序的计算结果不是外界因素的影响，只有本身的动作才能改变。）。  
（3）程序执行结果的确定性（也称为程序执行结果与时间无关性。）。  
（4）程序执行结果的可再现性。  

**程序的并发执行的特点：**  
（1）在执行期间并发程序相互制约。  
（2）程序与计算不再一一对应。  
（3）并发程序的执行结果不可再现。  
（4）程序的并行执行与程序的并发执行。 

**多道程序设计环境具有以下特点：**   
独立性、随机性、资源共享性。  

**多道程序设计的缺陷：**  
（1）可能延长程序的执行时间(比如A程序需要40s，但是在多道程序处理中用了45S)。  
（2）系统效率的提高有一定限度。 

## 进程
定义：进程是具有一定独立功能的程序在某个数据集合上的一次运行活动，是系统进行资源分配和调度的一个独立单位。程序是静态的，而进程是动态的。  
为什么要使用进程？  
为了更好地实现操作系统的并发性和共享性。



**进程的特征：**   
（1）并发性。  
（2）动态性(体现在两个方面，首先进程有生命周期有产生也有消亡，其次就是在运行的过程状态也在不断地变化。)。  
（3）独立性(一个进程是一个相对完整的资源分配单位。)。  
（4）交往性(在运行过程中，可能会与其他进程发生直接或间接的相互关系。)。  
（5）异步性(每个进程都是按各自独立不可预知的速度向前推进,并不是同步的。)。  
（6）结构性(一个进程由程序、数据和进程控制块三部分组成。)  

**三状态进程模型：**  
（1）运行状态，是指进程已获得处理器，并且在处理器上执行的状态。显然，在一个单处理器系统中，最多只有一个进程处于运行态。  
（2）就绪状态，是指一个进程已经具备运行条件，但由于没有获得处理器而不能运行所处的状态。一旦把处理器分配给它，该进程就可运行。处于就绪状态的进程可以是多个。  
（3）等待状态，也称阻塞状态或封锁状态，是指进程因等待某种事件发生而暂时不能运行的状态。  
三种基本状态之间的转换：就绪→运行、运行→就绪、运行→等待、等待→就绪。

**进程的组成：**   
程序和数据以及PCB，PCB是灵魂。  

**进程控制块(PCB)的内容**   
进程控制块是做什么的， 看名字就知道了。就是控制进程的。  
内容可以分为两大部分。  
(1)调度信息  
调度信息供进程调度时使用,描述进程当前所处的状况，包括进程名、进程号、地址空间信息、优先级、当前状态、进程队列指针，等等。  
(2)现场信息  
现场信息记录那些被其他进程改变寄存器的内容，如程序状态，时钟，界地址寄存器等，一旦中断进程的程序，必须把中断时刻的信息，写进进程控制块的现场信息。

进程由程序、数据和进程控制块三部分组成。

**PCB组织**  
系统为了便于管理，把所有的PCB组织起来，有常见的三种组织方式。
PCB组织方式：  
(1)线性方式、  

(2)索引方式、  
(3)链接方式。  
进程的队列：就绪队列、等待队列、运行队列。

**进程控制的原语一般有：**  
创建进程、撤销进程、挂起进程、激活进程、阻塞进程、唤醒进程以及改变进程优先级等。

**在UNIX类操作系统中，父进程通过调用fork函数创建子进程。典型的步骤如下：**  
（1）为子进程分配一个空闲的proc结构（即进程描述符）。  
（2）赋予子进程唯一的标识PID。  
（3）以一次一页的方式复制父进程用户地址空间。  
（4）获得子进程继承的共享资源的指针，如打开的文件和当前工作目录等。  
（5）子进程就绪，加入调度队列。  
（6）对子进程返回标识符0；向父进程返回子进程的PID。  

## 线程
**线程的定义：**  
在引入线程的操作系统中，线程是进程中的一个实体，是处理器调度和分派的基本单位。

**线程实现机制：**  
用户级线程、内核级线程、混合实现方式。

## 进程调度
**进程调度的主要功能：**  
记录系统中所有进程的执行状况；根据一定的调度算法，从就绪队列中选出一个进程，准备把处理器分配给它；把处理器分配给进程。  

**进程调度的时机：**  
（1）正在执行的进程运行完毕。  
（2）正在执行的进程由于某种错误而终止。  
（3）时间片用完，即有一个进程从运行状态变为就绪状态。  
（4）正在执行的进程调用阻塞原语将自己阻塞起来，即一个进程从运行状态进入阻塞状态。  
（5）创建了新的进程，即有一个新的进程进入就绪队列。  
（6）正在执行的进程调用了唤醒原语操作激活了等待资源的进程，即一个等待状态的进程变为就绪状态。 

**进程调度算法：**  
（1）先来先服务算法。  
（2）最短进程优先算法。  
（3）最短剩余时间优先算法。  
（4）最高响应比优先算法。响应比Rp＝（等待时间＋预计运行时间）／预计运行时间＝周转时间／预计运行时间。  
（5）轮转算法。  
（6）最高优先级算法。  
（7）多级反馈队列算法。该法综合了先进先出调度算法、时间片轮转算法和可抢占式.  
最高优先级算法的一种进程调度算法。

## 系统内核
一般把操作系统中提供支持系统运行的各种基本操作和基础功能的一组程序模块集中安排，形成一个操作系统的核心，称为系统核心或系统内核，简称内核。
通常，内核只占整个操作系统代码中的一小部分，内核是操作系统中最接近裸机的部分。
